package javase.ch04;

import java.util.concurrent.LinkedBlockingQueue;

/**
 * 线程 1 打印 A 后，尝试从空队列获取元素（阻塞），
 * 线程 2 打印 B 后向队列添加元素（唤醒线程 1），线程 1 获取元素后打印 C。
 */
public class LinkedBlockingQueueTest {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>(1);
        new Thread(()->{
            System.out.println("A");
            try {
                queue.take();  //调用 queue.take() 从空队列获取元素，由于队列为空，线程1被阻塞等待
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("C");
        }).start();
        new Thread(()->{
            System.out.println("B");
            try {
                queue.put("B完成"); //调用 queue.put("B完成") 向队列添加元素，此时队列有元素，唤醒等待的线程1
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }).start();
    }
}

